//= Thread para tratar de cada canal de comunicacao com um cliente
package p;

import java.net.*;
import java.io.*;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;

class ConnectionServerThread extends Thread implements Serializable {
    // socket deste cliente

    private Vector clientes;
    private Socket ligacao;
//    private ConnectionServerDB t;
    private ObjectInputStream ois;
    private ObjectOutputStream oos;
    private static Registo meuNome;
    // construtor que recebe o socket deste cliente
    //   Socket clientSocket;

    public ConnectionServerThread(Socket s, Vector clientes) {
        ligacao = s;
        this.clientes = clientes;
    }

    public void run() {
        try {
            //  BufferedReader entrada = new BufferedReader(new InputStreamReader(ligacao.getInputStream()));
            //  PrintStream saida = new PrintStream(ligacao.getOutputStream());
            ois = new ObjectInputStream(ligacao.getInputStream());
            oos = new ObjectOutputStream(ligacao.getOutputStream());

            //nome do cliente
            //meuNome = entrada.readLine();

            meuNome = (Registo) ois.readObject();

            if (meuNome == null) {
                return;
            }
            clientes.add(oos);
            System.out.println("nome: " + meuNome.getRegisto());

            //String tipoMsg = entrada.readLine();
            //System.out.println("impecavel tem o "+tipoMsg);

            Mensagem m = (Mensagem) ois.readObject();
            System.out.println("Recebi a mensagem: " + m.getMensagem());
            sendToAll(oos, m);


        } catch (ClassNotFoundException ex) {
            Logger.getLogger(ConnectionServerThread.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException e) {
        }
    }

    private void sendToAll(ObjectOutputStream oos, Mensagem msg) throws IOException {
        Enumeration e = clientes.elements();
        while (e.hasMoreElements()) {
            // obtém o fluxo de saída de um dos clientes
            ObjectOutputStream chat = (ObjectOutputStream) e.nextElement();
            if (chat != oos) {
                chat.writeObject(msg);
                chat.flush();
            }
        }

    }
}
